Spring JDBC-এ Auditing হল একটি প্রক্রিয়া যার মাধ্যমে আপনি একটি এপ্লিকেশনের ডেটাবেস অপারেশনগুলিতে (যেমন ইনসার্ট, আপডেট, ডিলিট) অতিরিক্ত তথ্য (যেমন, কে এবং কখন ডেটা পরিবর্তন করেছে) সংরক্ষণ করতে পারেন। এই ধরনের তথ্য সাধারণত ডেটাবেসের মধ্যে created_by
, created_date
, modified_by
, এবং modified_date
ফিল্ডের মাধ্যমে সংরক্ষিত হয়।
Spring JDBC-তে Auditing এর ব্যবহার সাধারণত কিছু অতিরিক্ত কলাম যোগ করে, যেগুলোর মান অটোমেটিক্যালি সেট করা হয় যখন ডেটাবেসে কোনো রেকর্ড ইনসার্ট বা আপডেট করা হয়। Spring Framework-এ Auditing সাধারণত Spring Data JPA-তে ব্যবহৃত হলেও, Spring JDBC-এ নিজস্ব পদ্ধতি অনুসরণ করে এই কাজ করা সম্ভব।
নিচে Spring JDBC-এ Auditing এর কিভাবে কাজ করা যায় তার উদাহরণ দেওয়া হল:
application.properties
ফাইলে ডেটাবেস কনফিগারেশনপ্রথমে, application.properties
ফাইলে ডেটাবেস কনফিগারেশন করতে হবে:
# DataSource Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=root
spring.datasource.password=root_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
আপনি যদি created_by
, created_date
, modified_by
, এবং modified_date
ফিল্ডগুলি ডেটাবেসে সংরক্ষণ করতে চান, তবে প্রথমে ডেটাবেস টেবিলের মধ্যে এই ফিল্ডগুলো যুক্ত করতে হবে। উদাহরণ:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(255),
salary DOUBLE,
created_by VARCHAR(255),
created_date TIMESTAMP,
modified_by VARCHAR(255),
modified_date TIMESTAMP
);
Spring JDBC-তে Auditing করার জন্য আমাদের যে তথ্য দরকার (যেমন, বর্তমানে লগইন করা ইউজার বা তারিখ/সময়) তা কিভাবে সেট করা যাবে তা দেখানো হচ্ছে। সাধারণত আপনি JdbcTemplate
এর মাধ্যমে এই ফিল্ডগুলো অটোমেটিক্যালি সেট করার জন্য beforeInsert
বা beforeUpdate
মেথড ব্যবহার করতে পারেন।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.sql.Timestamp;
import java.util.Date;
@Repository
public class EmployeeRepository {
private JdbcTemplate jdbcTemplate;
// Constructor injection for JdbcTemplate
public EmployeeRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// Method to insert a new employee with auditing info
public void insertEmployeeWithAuditing(Employee employee, String createdBy) {
String sql = "INSERT INTO employee (id, name, salary, created_by, created_date) VALUES (?, ?, ?, ?, ?)";
jdbcTemplate.update(sql, employee.getId(), employee.getName(), employee.getSalary(),
createdBy, new Timestamp(System.currentTimeMillis()));
}
// Method to update an existing employee with auditing info
public void updateEmployeeWithAuditing(Employee employee, String modifiedBy) {
String sql = "UPDATE employee SET name = ?, salary = ?, modified_by = ?, modified_date = ? WHERE id = ?";
jdbcTemplate.update(sql, employee.getName(), employee.getSalary(),
modifiedBy, new Timestamp(System.currentTimeMillis()), employee.getId());
}
}
Employee
ক্লাস:এখানে একটি Employee
ক্লাস তৈরি করা হয়েছে, যা ডেটাবেসের employee
টেবিলের রেকর্ডগুলিকে রিপ্রেজেন্ট করবে:
public class Employee {
private int id;
private String name;
private double salary;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
এখন, EmployeeService
ক্লাসে insertEmployeeWithAuditing
এবং updateEmployeeWithAuditing
মেথডগুলি কল করবেন:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
public void addEmployee(Employee employee, String createdBy) {
employeeRepository.insertEmployeeWithAuditing(employee, createdBy);
}
public void updateEmployee(Employee employee, String modifiedBy) {
employeeRepository.updateEmployeeWithAuditing(employee, modifiedBy);
}
}
আপনি যদি এই কার্যকলাপ ওয়েব রেসপন্সের মাধ্যমে করতে চান, তবে Spring MVC Controller তৈরি করতে পারেন:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class EmployeeController {
private final EmployeeService employeeService;
@Autowired
public EmployeeController(EmployeeService employeeService) {
this.employeeService = employeeService;
}
@PostMapping("/employee")
public String addEmployee(@RequestBody Employee employee) {
// For example, setting createdBy as "admin"
employeeService.addEmployee(employee, "admin");
return "Employee added successfully with auditing!";
}
@PutMapping("/employee/{id}")
public String updateEmployee(@PathVariable int id, @RequestBody Employee employee) {
// For example, setting modifiedBy as "admin"
employee.setId(id);
employeeService.updateEmployee(employee, "admin");
return "Employee updated successfully with auditing!";
}
}
এখন আপনি Spring Boot অ্যাপ্লিকেশনটি রান করতে পারেন এবং POST /employee
বা PUT /employee/{id}
রিকোয়েস্ট পাঠিয়ে কর্মী তৈরি বা আপডেট করতে পারবেন। এতে করে created_by
, created_date
, modified_by
, এবং modified_date
ফিল্ডগুলো অটোমেটিক্যালি সেট হবে।
created_by
, created_date
, modified_by
, modified_date
ফিল্ডগুলোর মান অটোমেটিক্যালি সেট করা যায়, যা রক্ষণাবেক্ষণ সহজ করে তোলে।Spring JDBC-তে Auditing ব্যবহারের মাধ্যমে আপনি ডেটাবেস অপারেশনগুলো ট্র্যাক করতে পারবেন এবং ডেটাবেসের যেকোনো পরিবর্তন সম্পর্কে গুরুত্বপূর্ণ তথ্য সংগ্রহ করতে সক্ষম হবেন।
স্প্রিং জেডিবিসি (Spring JDBC)-তে Auditing হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসে করা পরিবর্তনগুলো ট্র্যাক করা হয়। সাধারণত এটি ব্যবহৃত হয় এমন ডেটা রেকর্ডের সৃষ্টির সময়, সংশোধন এবং মুছে ফেলার সময়—এই সমস্ত ক্রিয়াকলাপের একটি ইতিহাস রাখার জন্য। Auditing ডেটাবেসের জন্য গুরুত্বপূর্ণ কারণ এটি ডেটার পরিবর্তন এবং ব্যবহারের উপর নজর রাখতে সাহায্য করে, যা নিরাপত্তা, অভ্যন্তরীণ অডিট এবং নিয়ম-নীতি মেনে চলার জন্য অপরিহার্য।
স্প্রিং জেডিবিসি-তে auditing কার্যকর করতে, সাধারণত নিম্নলিখিত কাজগুলো করা হয়:
স্প্রিং ফ্রেমওয়ার্কের মাধ্যমে auditing পরিচালনা করার জন্য, আপনি কিছু অতিরিক্ত স্টেপ বা কাস্টম কোড ব্যবহার করতে পারেন যেমন:
created_by
: সৃষ্টিকারী ব্যবহারকারীর নাম।created_at
: সৃষ্টির তারিখ এবং সময়।updated_by
: শেষ আপডেটকারী ব্যবহারকারীর নাম।updated_at
: আপডেটের তারিখ এবং সময়।JdbcTemplate
এবং DataSource
এর মাধ্যমে এই পরিবর্তনগুলির জন্য auditing তথ্য স্টোর করতে পারেন। উদাহরণস্বরূপ, JdbcTemplate
-এর update
মেথড ব্যবহার করে আপনি ডেটা ইনসার্ট বা আপডেট করার সময় audit তথ্য যোগ করতে পারেন।এখানে একটি উদাহরণ দেওয়া হলো, যেখানে একটি Employee টেবিলের auditing করা হবে:
টেবিলের কাঠামো যাতে auditing ফিল্ডগুলি অন্তর্ভুক্ত থাকে:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
salary DECIMAL(10, 2),
created_by VARCHAR(50),
created_at TIMESTAMP,
updated_by VARCHAR(50),
updated_at TIMESTAMP
);
এখানে EmployeeDao
ক্লাসে auditing তথ্য যোগ করা হবে:
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Date;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// Setter method for JdbcTemplate
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// Insert employee with auditing fields
public void addEmployee(Employee employee, String createdBy) {
String sql = "INSERT INTO employee (id, name, salary, created_by, created_at) VALUES (?, ?, ?, ?, ?)";
jdbcTemplate.update(sql, employee.getId(), employee.getName(), employee.getSalary(), createdBy, new Date());
}
// Update employee with auditing fields
public void updateEmployee(Employee employee, String updatedBy) {
String sql = "UPDATE employee SET name = ?, salary = ?, updated_by = ?, updated_at = ? WHERE id = ?";
jdbcTemplate.update(sql, employee.getName(), employee.getSalary(), updatedBy, new Date(), employee.getId());
}
}
class Employee {
private int id;
private String name;
private double salary;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
এখানে EmployeeDao ব্যবহার করে একটি কর্মী ইনসার্ট এবং আপডেট করা হবে:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpringJDBCWithAuditing {
public static void main(String[] args) {
// Load the Spring context
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// Get the EmployeeDao bean
EmployeeDao employeeDao = (EmployeeDao) context.getBean("employeeDao");
// Create a new employee
Employee employee = new Employee();
employee.setId(1);
employee.setName("John Doe");
employee.setSalary(50000);
// Add employee with auditing
employeeDao.addEmployee(employee, "admin");
// Update employee with auditing
employee.setSalary(55000);
employeeDao.updateEmployee(employee, "admin");
}
}
Auditing একটি গুরুত্বপূর্ণ প্রক্রিয়া যা ডেটাবেসের সুরক্ষা, ট্র্যাকিং এবং আইনগত মান বজায় রাখতে সাহায্য করে। স্প্রিং জেডিবিসি ব্যবহার করে আপনি সহজেই ডেটাবেসের সৃষ্টির সময়, আপডেট এবং মুছে ফেলার লগ রাখতে পারেন, যা পরে ভবিষ্যতে রেকর্ডগুলো পুনরুদ্ধার করতে, অডিট করতে এবং নিরাপত্তা বজায় রাখতে সহায়ক হয়।
Auditing একটি গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপ্লিকেশন বা ডেটাবেসের মধ্যে কোনো পরিবর্তন বা কার্যকলাপের রেকর্ড রাখে। এটি সাধারণত ডেটার পরিবর্তনগুলি ট্র্যাক করতে এবং ব্যবহারকারীদের ক্রিয়াকলাপের ইতিহাস বজায় রাখতে ব্যবহৃত হয়। স্প্রিং ফ্রেমওয়ার্কে, Auditing কনফিগার করা খুব সহজ এবং এটি Spring Data JPA, Spring JDBC, অথবা সাধারণ Spring Beans এর মাধ্যমে করা যেতে পারে।
স্প্রিং জেডিবিসি (Spring JDBC) এ Auditing কনফিগার করা সাধারণত টেবিলের createdAt
, createdBy
, updatedAt
, এবং updatedBy
এর মতো ফিল্ড রাখতে হয়, যা ডেটা তৈরি বা আপডেট হওয়ার সময় স্বয়ংক্রিয়ভাবে পূর্ণ হয়।
@CreatedDate
এবং @LastModifiedDate
এর মাধ্যমে টেবিলের অডিট ফিল্ডে ডেটা অটোমেটিকালি আপডেট করা।@CreatedBy
এবং @LastModifiedBy
এর মাধ্যমে ব্যবহারকারী নির্ধারণ করা যারা ডেটা তৈরি বা আপডেট করেছে।স্প্রিং ফ্রেমওয়ার্কের Auditing ব্যবহারের জন্য সাধারণত Spring Data JPA এর কনফিগারেশন ব্যবহার করা হয়, কিন্তু আমরা Spring JDBC এর জন্যও একটি কাস্টম কনফিগারেশন তৈরি করতে পারি।
আপনার ডেটাবেস টেবিলগুলিতে কিছু অতিরিক্ত কলাম থাকতে হবে যেমন:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
created_at TIMESTAMP,
created_by VARCHAR(100),
updated_at TIMESTAMP,
updated_by VARCHAR(100)
);
এখানে, created_at
, created_by
, updated_at
, এবং updated_by
ফিল্ডগুলো ডেটাবেসের অডিটিং তথ্য ট্র্যাক করবে।
AuditHelper
ক্লাস তৈরি করা:এই ক্লাসটি অডিটিং ইনফরমেশন সন্নিবেশ করতে সাহায্য করবে (যেমন, createdBy
, createdAt
, updatedBy
, updatedAt
):
import java.time.LocalDateTime;
public class AuditHelper {
public static String getCurrentUser() {
// আপনি এখানে বর্তমানে লগ ইন করা ব্যবহারকারীর নাম বের করতে পারেন
return "system"; // এটা কেবল উদাহরণের জন্য, এখানে আপনি ব্যবহারকারীর নাম সেট করতে পারেন
}
public static LocalDateTime getCurrentTime() {
return LocalDateTime.now();
}
}
EmployeeDao
ক্লাসের মধ্যে আপনি অডিট ফিল্ড গুলো সেট করতে পারেন, যেমন:
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.time.LocalDateTime;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// DataSource Inject করা হচ্ছে
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// Employee ইনসার্ট করার সময় অডিটিং তথ্য যোগ করা
public void insertEmployee(Employee employee) {
String sql = "INSERT INTO employee (id, name, age, created_at, created_by, updated_at, updated_by) VALUES (?, ?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(sql,
employee.getId(),
employee.getName(),
employee.getAge(),
AuditHelper.getCurrentTime(), // created_at
AuditHelper.getCurrentUser(), // created_by
AuditHelper.getCurrentTime(), // updated_at
AuditHelper.getCurrentUser() // updated_by
);
}
// Employee আপডেট করার সময় অডিটিং তথ্য যোগ করা
public void updateEmployee(Employee employee) {
String sql = "UPDATE employee SET name = ?, age = ?, updated_at = ?, updated_by = ? WHERE id = ?";
jdbcTemplate.update(sql,
employee.getName(),
employee.getAge(),
AuditHelper.getCurrentTime(), // updated_at
AuditHelper.getCurrentUser(), // updated_by
employee.getId()
);
}
}
এখানে, যখন আপনি insertEmployee
বা updateEmployee
পদ্ধতি কল করেন, তখন অডিটিং তথ্য যেমন created_at
, created_by
, updated_at
, এবং updated_by
অটোমেটিক্যালি ফিল্ডে আপডেট হবে।
Employee
ক্লাসের উদাহরণ:public class Employee {
private int id;
private String name;
private int age;
// getters and setters
}
স্প্রিং কনফিগারেশন ক্লাসে @EnableAspectJAutoProxy
ব্যবহার করা যেতে পারে, যাতে অডিটিং প্রসেস অটোমেটিক্যালি সাপোর্ট করা হয়।
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "com.example")
public class AppConfig {
// স্প্রিং কনফিগারেশন
}
আপনি যদি Spring AOP ব্যবহার করতে চান, তবে একটি Audit Aspect তৈরি করতে পারেন, যা insert
এবং update
অপারেশনগুলোর সময় অডিটিং তথ্য স্বয়ংক্রিয়ভাবে যোগ করবে।
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class AuditAspect {
@Before("execution(* com.example.EmployeeDao.insertEmployee(..))")
public void addAuditForInsert() {
// অডিটিং তথ্য প্রক্রিয়াকরণ, যেমন created_at, created_by, updated_at, updated_by
System.out.println("Audit info added for insert operation");
}
@Before("execution(* com.example.EmployeeDao.updateEmployee(..))")
public void addAuditForUpdate() {
// অডিটিং তথ্য প্রক্রিয়াকরণ, যেমন updated_at, updated_by
System.out.println("Audit info added for update operation");
}
}
createdBy
এবং updatedBy
ফিল্ডগুলির মাধ্যমে আপনি জানতে পারবেন কোন ব্যবহারকারী কোন ডেটা পরিবর্তন করেছেন।স্প্রিং জেডিবিসি ব্যবহার করে অডিটিং কনফিগার করা সহজ এবং কার্যকর। আপনি যদি টেবিলের জন্য অডিট ফিল্ড (যেমন createdAt
, createdBy
, updatedAt
, updatedBy
) ব্যবহার করেন, তবে স্প্রিং কনফিগারেশন এবং স্প্রিং JDBC এর মাধ্যমে অডিটিং স্বয়ংক্রিয়ভাবে পরিচালনা করা যায়। এটি আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং কার্যকরী করে তোলে, বিশেষ করে যখন ডেটার পরিবর্তন বা আপডেট ট্র্যাক করতে হয়।
স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহার করে Auditing পরিচালনা করা যায়, যা সাধারণত ডেটাবেসে রেকর্ড করার সময় ট্র্যাকিং তথ্য যেমন created_by, created_at, updated_by, updated_at ইত্যাদি সংরক্ষণ করে। এই তথ্যগুলো সাধারণত একটি সিস্টেমে কিভাবে রেকর্ড তৈরি হয়েছে, কিভাবে আপডেট হয়েছে, এবং কে এটি তৈরি বা আপডেট করেছে, তা ট্র্যাক করতে ব্যবহৃত হয়। স্প্রিং জেডিবিসি এর মাধ্যমে auditing সহজে পরিচালনা করা যায়।
Auditing হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসে ডেটা তৈরির বা পরিবর্তনের সময়ের সাথে সম্পর্কিত অতিরিক্ত তথ্য (যেমন ব্যবহারকারীর নাম, সময় ইত্যাদি) রেকর্ড করা হয়। এটি সাধারণত সিকিউরিটি, কমপ্লায়েন্স এবং ডেটা ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।
ধরা যাক, আমরা একটি Employee
টেবিল পরিচালনা করছি এবং আমরা চাই যে যখন একটি Employee
রেকর্ড তৈরি হয় বা আপডেট হয়, তখন সেই রেকর্ডে created_by
, created_at
, updated_by
, এবং updated_at
এর মতো ফিল্ডস সংরক্ষণ করা হোক।
CREATE TABLE Employee (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
position VARCHAR(50),
created_by VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_by VARCHAR(50),
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
এখানে:
created_by
: রেকর্ডটি কে তৈরি করেছে তা ট্র্যাক করবে।created_at
: রেকর্ডটি কখন তৈরি হয়েছে তা ট্র্যাক করবে।updated_by
: রেকর্ডটি কে আপডেট করেছে তা ট্র্যাক করবে।updated_at
: রেকর্ডটি কখন আপডেট হয়েছে তা ট্র্যাক করবে।import java.sql.Timestamp;
public class Employee {
private int id;
private String name;
private String position;
private String createdBy;
private Timestamp createdAt;
private String updatedBy;
private Timestamp updatedAt;
// Getters and Setters
}
Employee
ক্লাসের জন্য একটি RowMapper
তৈরি করা হবে যা SQL কুয়েরি থেকে প্রাপ্ত রেকর্ডগুলোকে Employee
অবজেক্টে রূপান্তর করবে।
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setPosition(rs.getString("position"));
employee.setCreatedBy(rs.getString("created_by"));
employee.setCreatedAt(rs.getTimestamp("created_at"));
employee.setUpdatedBy(rs.getString("updated_by"));
employee.setUpdatedAt(rs.getTimestamp("updated_at"));
return employee;
}
}
JdbcTemplate
ক্লাসের সাহায্যে, যখন একটি Employee
রেকর্ড তৈরি বা আপডেট করা হবে, তখন আমরা created_by
, updated_by
, created_at
, এবং updated_at
এর মান সঠিকভাবে সন্নিবেশ বা আপডেট করব।
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Map;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
public EmployeeDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void addEmployee(Employee employee, String createdBy) {
String sql = "INSERT INTO Employee (name, position, created_by, created_at) " +
"VALUES (?, ?, ?, CURRENT_TIMESTAMP)";
jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), createdBy);
}
}
এখানে:
created_by
: রেকর্ড তৈরি করার সময় আমরা বর্তমানে লগ ইন করা ব্যবহারকারীর নাম অথবা যাকে দিয়ে রেকর্ডটি তৈরি হচ্ছে, তার নাম সংরক্ষণ করব।created_at
: এটি SQL তে CURRENT_TIMESTAMP
দ্বারা স্বয়ংক্রিয়ভাবে নির্ধারিত হবে।public void updateEmployee(Employee employee, String updatedBy) {
String sql = "UPDATE Employee SET name = ?, position = ?, updated_by = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?";
jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), updatedBy, employee.getId());
}
এখানে:
updated_by
: রেকর্ডটি যে ব্যবহারকারী আপডেট করেছেন তার নাম সংরক্ষণ করা হচ্ছে।updated_at
: এটি SQL তে CURRENT_TIMESTAMP
দ্বারা আপডেট হবে।import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class Main {
public static void main(String[] args) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/yourdatabase");
dataSource.setUsername("root");
dataSource.setPassword("password");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
EmployeeDao employeeDao = new EmployeeDao(jdbcTemplate);
// Adding a new employee
Employee newEmployee = new Employee();
newEmployee.setName("John Doe");
newEmployee.setPosition("Developer");
employeeDao.addEmployee(newEmployee, "admin");
// Updating the employee
newEmployee.setPosition("Senior Developer");
employeeDao.updateEmployee(newEmployee, "admin");
}
}
created_by
, updated_by
, created_at
, এবং updated_at
ফিল্ডগুলো ডেটাবেস টেবিলের অংশ হিসেবে ব্যবহার করা হয়।JdbcTemplate
এবং SQL কুয়েরি এর মাধ্যমে auditing ডেটা সন্নিবেশ বা আপডেট করা হয়।CURRENT_TIMESTAMP
এবং CURRENT_USER()
ব্যবহার করে সময় এবং ব্যবহারকারীর তথ্য স্বয়ংক্রিয়ভাবে নির্ধারণ করা হয়।Read more